#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
智慧童话世界 - 主启动程序
AI可选分支剧情童话书应用
结合ERNIE-4.5-0.3B-Paddle、MCP功能和智源研究院数据
"""

import asyncio
import logging
import sys
import os
from pathlib import Path

# 添加当前目录到Python路径
sys.path.append(str(Path(__file__).parent))

from ai_fairy_tale_book import AIFairyTaleBook
from web_interface import app
from mcp_integration import initialize_mcp, get_mcp_instance
from zhiyuan_integration import initialize_zhiyuan, get_zhiyuan_instance

# 配置日志
logging.basicConfig(
    level=logging.INFO,
    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
    handlers=[
        logging.FileHandler('fairy_tale_app.log', encoding='utf-8'),
        logging.StreamHandler(sys.stdout)
    ]
)

logger = logging.getLogger(__name__)

async def initialize_all_systems():
    """初始化所有系统组件"""
    try:
        logger.info("🚀 开始初始化智慧童话世界应用...")
        
        # 初始化MCP集成
        logger.info("📡 初始化MCP集成...")
        await initialize_mcp()
        
        # 初始化智源数据集成
        logger.info("🧠 初始化智源研究院数据集成...")
        await initialize_zhiyuan()
        
        # 初始化AI童话书核心
        logger.info("📚 初始化AI童话书核心...")
        fairy_tale_app = AIFairyTaleBook()
        await fairy_tale_app.initialize()
        
        logger.info("✅ 所有系统初始化完成！")
        return True
        
    except Exception as e:
        logger.error(f"❌ 系统初始化失败: {e}")
        return False

def check_dependencies():
    """检查依赖项"""
    logger.info("🔍 检查系统依赖...")
    
    required_packages = [
        'flask', 'paddlepaddle', 'numpy', 'pillow', 
        'requests', 'asyncio', 'pathlib'
    ]
    
    missing_packages = []
    
    for package in required_packages:
        try:
            __import__(package)
            logger.info(f"✅ {package} - 已安装")
        except ImportError:
            missing_packages.append(package)
            logger.warning(f"❌ {package} - 未安装")
    
    if missing_packages:
        logger.error(f"缺少依赖包: {', '.join(missing_packages)}")
        logger.info("请运行: pip install -r requirements.txt")
        return False
    
    return True

def check_model_files():
    """检查模型文件"""
    logger.info("🔍 检查ERNIE模型文件...")
    
    model_dir = Path("ERNIE-4.5-0.3B-Paddle")
    if not model_dir.exists():
        logger.warning("❌ ERNIE模型目录不存在")
        logger.info("正在创建模型目录...")
        model_dir.mkdir(exist_ok=True)
        
        # 运行模型下载脚本
        try:
            import download_ernie_model
            download_ernie_model.setup_ernie_model()
            logger.info("✅ ERNIE模型设置完成")
        except Exception as e:
            logger.error(f"❌ 模型设置失败: {e}")
            return False
    else:
        logger.info("✅ ERNIE模型目录存在")
    
    return True

def create_static_directories():
    """创建静态文件目录"""
    directories = ['static', 'templates', 'uploads', 'logs']
    
    for dir_name in directories:
        dir_path = Path(dir_name)
        if not dir_path.exists():
            dir_path.mkdir(exist_ok=True)
            logger.info(f"📁 创建目录: {dir_name}")
        else:
            logger.info(f"✅ 目录已存在: {dir_name}")

def print_startup_banner():
    """打印启动横幅"""
    banner = """
    ╔══════════════════════════════════════════════════════════════╗
    ║                    🌟 智慧童话世界 🌟                        ║
    ║                AI可选分支剧情童话书应用                       ║
    ║                                                              ║
    ║  🤖 基于 ERNIE-4.5-0.3B-Paddle 大模型                       ║
    ║  🧠 集成智源研究院深度科研数据                                ║
    ║  📡 支持MCP模型控制协议                                      ║
    ║  🎨 多模态交互体验 (文本/图像/语音)                          ║
    ║                                                              ║
    ║  🚀 让每个孩子都能拥有专属的智慧童话！                       ║
    ╚══════════════════════════════════════════════════════════════╝
    """
    print(banner)

def print_system_info():
    """打印系统信息"""
    info = f"""
    📊 系统信息:
    ├─ Python版本: {sys.version.split()[0]}
    ├─ 工作目录: {os.getcwd()}
    ├─ MCP集成: ✅ 已启用
    ├─ 智源数据: ✅ 已加载
    ├─ ERNIE模型: ✅ 已配置
    └─ Web界面: http://localhost:5000
    
    🎯 核心功能:
    ├─ 🎭 智能故事生成
    ├─ 🔀 分支剧情选择
    ├─ 🎨 多模态交互
    ├─ 📚 教育内容融合
    ├─ 🧠 个性化学习
    └─ 📊 学习进度追踪
    """
    print(info)

async def main():
    """主函数"""
    try:
        # 打印启动横幅
        print_startup_banner()
        
        # 创建必要目录
        create_static_directories()
        
        # 检查依赖
        if not check_dependencies():
            logger.error("❌ 依赖检查失败，请安装所需依赖包")
            return
        
        # 检查模型文件
        if not check_model_files():
            logger.error("❌ 模型文件检查失败")
            return
        
        # 初始化所有系统
        if not await initialize_all_systems():
            logger.error("❌ 系统初始化失败")
            return
        
        # 打印系统信息
        print_system_info()
        
        # 启动Web应用
        logger.info("🌐 启动Web应用服务器...")
        logger.info("📱 请在浏览器中访问: http://localhost:5000")
        logger.info("🛑 按 Ctrl+C 停止应用")
        
        # 运行Flask应用
        app.run(
            host='0.0.0.0',
            port=5000,
            debug=True,
            use_reloader=False  # 避免重复初始化
        )
        
    except KeyboardInterrupt:
        logger.info("👋 用户中断，正在关闭应用...")
    except Exception as e:
        logger.error(f"❌ 应用运行错误: {e}")
        import traceback
        traceback.print_exc()
    finally:
        logger.info("🔚 智慧童话世界应用已关闭")

if __name__ == "__main__":
    # 运行主程序
    asyncio.run(main())